package org.jetlinks.pro.dashboard;

import org.jetlinks.core.metadata.ConfigMetadata;
import org.jetlinks.core.metadata.DataType;
import org.reactivestreams.Publisher;
import reactor.core.publisher.Flux;

/**
 * 指标维度,如: 每小时,服务器1
 *
 * @author zhouhao
 */
public interface MeasurementDimension {

    /**
     * 获取维度描述信息
     *
     * @return 描述信息
     */
    DimensionDefinition getDefinition();

    /**
     * @return 输出数据的类型
     */
    DataType getValueType();

    /**
     * 获取此维度需要的参数定义
     *
     * @return 参数定义
     */
    ConfigMetadata getParams();

    /**
     * @return 是否实时监控
     */
    boolean isRealTime();

    /**
     * 获取维度数据
     *
     * @param parameter 参数
     * @return 数据流
     */
    Publisher<? extends MeasurementValue> getValue(MeasurementParameter parameter);

}
